{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Evaluation with ML\n",
    "The point of this section is to check whether the generated data can be used to train new models. I will do this mostly by training a classifier on the generated data and then perform inference on the original data. The 'test set' data will in this case give a good indication of how usable the data is."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\C64062\\anaconda3\\envs\\fastai\\lib\\importlib\\_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
      "  return f(*args, **kwds)\n",
      "C:\\Users\\C64062\\anaconda3\\envs\\fastai\\lib\\importlib\\_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
      "  return f(*args, **kwds)\n"
     ]
    }
   ],
   "source": [
    "import xgboost as xgb\n",
    "import pandas as pd\n",
    "from xgboost import XGBClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.ensemble import RandomForestClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(path_real, path_fake, real_sep=';', fake_sep=','):\n",
    "    real = pd.read_csv(path_real, sep=real_sep)\n",
    "    fake = pd.read_csv(path_fake, sep=fake_sep)\n",
    "    real = real.sample(len(fake))\n",
    "    real = real[fake.columns]\n",
    "    for col in fake.columns:\n",
    "        fake[col] = fake[col].astype(real[col].dtype)\n",
    "    return real, fake"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class FakeDataEval:\n",
    "    def __init__(self, real_data, fake_data, dep_var: str, clf=XGBClassifier, source='fake', **kwargs):\n",
    "        fake_data.columns = real_data.columns\n",
    "        self.real_data = real_data\n",
    "        self.fake_data = fake_data\n",
    "        self.dep_var = dep_var\n",
    "        if source == 'fake':\n",
    "            self.source = fake_data\n",
    "            self.target = real_data\n",
    "        elif source == 'real':\n",
    "            self.source = real_data\n",
    "            self.target = fake_data\n",
    "            \n",
    "            \n",
    "        if len(self.source[dep_var].unique()) > 2:\n",
    "            target_func = lambda x: (x > x.mean()).astype('int')\n",
    "            print(f'Label has more than 2 values. Comparing to mean...')\n",
    "            self.y_source = target_func(self.source[dep_var])\n",
    "            self.y_target = target_func(self.target[dep_var])\n",
    "        else:\n",
    "            self.y_source = self.source[dep_var]\n",
    "            self.y_target = self.target[dep_var]\n",
    "            assert not self.y_source.isna().any(), f'target contains null values. Please fix and try again.'\n",
    "            \n",
    "        self.clf = clf(**kwargs)\n",
    "        self.x_train, self.x_test, self.y_train, self.y_test = train_test_split(self.source.drop([dep_var], axis=1), self.y_source, test_size=0.2, shuffle=True)\n",
    "#         self.x_train, self.x_test, self.y_train, self.y_test = train_test_split(self.source, self.y_source, test_size=0.2, shuffle=True)\n",
    "\n",
    "    def fit(self, verbose=True):\n",
    "        self.clf.fit(self.x_train, self.y_train, eval_set=[(self.x_test, self.y_test)], verbose=verbose)\n",
    "        return self.clf.score(self.x_test, self.y_test)\n",
    "\n",
    "    def score(self):\n",
    "        return self.clf.score(self.target.drop([self.dep_var], axis=1), self.y_target)\n",
    "#         return self.clf.score(self.target, self.y_target)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/bauke/anaconda3/envs/p3.6/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3214: DtypeWarning: Columns (4) have mixed types. Specify dtype option on import or set low_memory=False.\n",
      "  if (yield from self.run_code(code, result)):\n"
     ]
    }
   ],
   "source": [
    "real, fake = get_data('../data/berka/berka_cat.csv', 'samples/berka_sample.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "for col in fake.select_dtypes(include=['object']):\n",
    "    fake[col] = pd.factorize(fake[col])[0]\n",
    "    real[col] = pd.factorize(real[col])[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Label has more than 2 values. Comparing to mean...\n",
      "[0]\tvalidation_0-error:0.1891\n",
      "[1]\tvalidation_0-error:0.1891\n",
      "[2]\tvalidation_0-error:0.18735\n",
      "[3]\tvalidation_0-error:0.18735\n",
      "[4]\tvalidation_0-error:0.18735\n",
      "[5]\tvalidation_0-error:0.1873\n",
      "[6]\tvalidation_0-error:0.1873\n",
      "[7]\tvalidation_0-error:0.1873\n",
      "[8]\tvalidation_0-error:0.1842\n",
      "[9]\tvalidation_0-error:0.1873\n",
      "[10]\tvalidation_0-error:0.1873\n",
      "[11]\tvalidation_0-error:0.1873\n",
      "[12]\tvalidation_0-error:0.18725\n",
      "[13]\tvalidation_0-error:0.1847\n",
      "[14]\tvalidation_0-error:0.18715\n",
      "[15]\tvalidation_0-error:0.1868\n",
      "[16]\tvalidation_0-error:0.171\n",
      "[17]\tvalidation_0-error:0.1709\n",
      "[18]\tvalidation_0-error:0.1709\n",
      "[19]\tvalidation_0-error:0.1709\n",
      "[20]\tvalidation_0-error:0.171\n",
      "[21]\tvalidation_0-error:0.171\n",
      "[22]\tvalidation_0-error:0.17095\n",
      "[23]\tvalidation_0-error:0.171\n",
      "[24]\tvalidation_0-error:0.17095\n",
      "[25]\tvalidation_0-error:0.17095\n",
      "[26]\tvalidation_0-error:0.1687\n",
      "[27]\tvalidation_0-error:0.1685\n",
      "[28]\tvalidation_0-error:0.1683\n",
      "[29]\tvalidation_0-error:0.16845\n",
      "[30]\tvalidation_0-error:0.16795\n",
      "[31]\tvalidation_0-error:0.16795\n",
      "[32]\tvalidation_0-error:0.1678\n",
      "[33]\tvalidation_0-error:0.1676\n",
      "[34]\tvalidation_0-error:0.1689\n",
      "[35]\tvalidation_0-error:0.16775\n",
      "[36]\tvalidation_0-error:0.1677\n",
      "[37]\tvalidation_0-error:0.1677\n",
      "[38]\tvalidation_0-error:0.16745\n",
      "[39]\tvalidation_0-error:0.16755\n",
      "[40]\tvalidation_0-error:0.16745\n",
      "[41]\tvalidation_0-error:0.16725\n",
      "[42]\tvalidation_0-error:0.16705\n",
      "[43]\tvalidation_0-error:0.16705\n",
      "[44]\tvalidation_0-error:0.16695\n",
      "[45]\tvalidation_0-error:0.16675\n",
      "[46]\tvalidation_0-error:0.1667\n",
      "[47]\tvalidation_0-error:0.1667\n",
      "[48]\tvalidation_0-error:0.1667\n",
      "[49]\tvalidation_0-error:0.1665\n",
      "[50]\tvalidation_0-error:0.16645\n",
      "[51]\tvalidation_0-error:0.16655\n",
      "[52]\tvalidation_0-error:0.16655\n",
      "[53]\tvalidation_0-error:0.1659\n",
      "[54]\tvalidation_0-error:0.166\n",
      "[55]\tvalidation_0-error:0.16575\n",
      "[56]\tvalidation_0-error:0.1658\n",
      "[57]\tvalidation_0-error:0.16535\n",
      "[58]\tvalidation_0-error:0.1654\n",
      "[59]\tvalidation_0-error:0.1655\n",
      "[60]\tvalidation_0-error:0.16555\n",
      "[61]\tvalidation_0-error:0.16535\n",
      "[62]\tvalidation_0-error:0.1651\n",
      "[63]\tvalidation_0-error:0.16505\n",
      "[64]\tvalidation_0-error:0.1649\n",
      "[65]\tvalidation_0-error:0.16495\n",
      "[66]\tvalidation_0-error:0.1644\n",
      "[67]\tvalidation_0-error:0.1644\n",
      "[68]\tvalidation_0-error:0.1643\n",
      "[69]\tvalidation_0-error:0.1641\n",
      "[70]\tvalidation_0-error:0.1642\n",
      "[71]\tvalidation_0-error:0.16395\n",
      "[72]\tvalidation_0-error:0.1637\n",
      "[73]\tvalidation_0-error:0.16375\n",
      "[74]\tvalidation_0-error:0.1638\n",
      "[75]\tvalidation_0-error:0.16385\n",
      "[76]\tvalidation_0-error:0.16385\n",
      "[77]\tvalidation_0-error:0.16385\n",
      "[78]\tvalidation_0-error:0.16385\n",
      "[79]\tvalidation_0-error:0.1638\n",
      "[80]\tvalidation_0-error:0.16335\n",
      "[81]\tvalidation_0-error:0.16355\n",
      "[82]\tvalidation_0-error:0.16375\n",
      "[83]\tvalidation_0-error:0.1633\n",
      "[84]\tvalidation_0-error:0.16355\n",
      "[85]\tvalidation_0-error:0.1636\n",
      "[86]\tvalidation_0-error:0.1635\n",
      "[87]\tvalidation_0-error:0.16325\n",
      "[88]\tvalidation_0-error:0.16345\n",
      "[89]\tvalidation_0-error:0.16335\n",
      "[90]\tvalidation_0-error:0.1636\n",
      "[91]\tvalidation_0-error:0.1634\n",
      "[92]\tvalidation_0-error:0.16345\n",
      "[93]\tvalidation_0-error:0.1634\n",
      "[94]\tvalidation_0-error:0.1633\n",
      "[95]\tvalidation_0-error:0.1634\n",
      "[96]\tvalidation_0-error:0.1634\n",
      "[97]\tvalidation_0-error:0.16325\n",
      "[98]\tvalidation_0-error:0.1633\n",
      "[99]\tvalidation_0-error:0.1634\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.71453"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = FakeDataEval(real, fake, 'trans_amount')\n",
    "x.fit()\n",
    "x.score()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fde69562e10>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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198pLOmRjLOYmZltNuorsMpb7pZlEDMzs81JfQU2alk2MzOzOtRXYA+QtFTSMqBnurxU0jJJS5sioJkVx5IlSzj11FPZZ5992HfffXnllVeYPn06hx12GD169OCEE05g6VL/N2BWmzoLbES0jIgvRMT2EdEqXa56/YWmCmlmTe/iiy/m2GOP5S9/+QvTp09n33335fzzz2f48OHMnDmTk046ieuuu67YMc1KVqFP09kiSGoHnBkRtxY5Rw64NCLeqKPPJcAdEbFyU4+zavVaug6btKmbZ2ZojzUMLsFcULrZGiNX5fD+65eXLl3KlCnNSEAHAAAU4klEQVRTGD16NABbb701W2+9NbNmzaJPnz4AHHPMMfTr14//+Z//+VzHNdtcFfp7sFuKdsD3qjdKKsUHG1wCbFfsELZ5ev/999lpp50499xzOfDAAzn//PNZsWIF3bt35/HHHwdg7NixzJkzp8hJzUqXInzvUhVJD5E8mm8WsBpYDswDekXEfpLGA7sC2wIjI+KOdLvlwEhgALAKGBgR8yV9E/g5sBb4OCL61HLc1sDdwH7An4GuwPcj4g1JvwMOAVoD4yLi55IuAq5Pcy6MiL6Svg5cDWxD8jjBcyNieQ3HugC4AKBDh50OvvKG0vvV5p1bw/xVxU5Rs1LN1hi5enRuu3551qxZfO973+Omm25iv/3246abbqJNmzYcffTR3HTTTXz88cccfvjhPProo0yYMKHWfS5fvpyysrLPFywjpZrNuRqmGLn69u07LSJ619fPBTaPpK7AxIjoLqkcmAR0j4jZ6fr2EfFRWhBfB74WEYskBfCNiHhC0ghgaURcI2kmcGxE/FNSu4hYUstxf5weZ4iknsCbwKFpga06ZktgMnBRRMyQVAn0joiFkjoAjwLHpY8WvAzYJiJ+Udf73a3bntHitJGf86w1vqE91vDrmaV59aJUszVGrvwp4g8++IBDDz2UyspKAF566SWGDx/OpEmfTUO/++67nHXWWbz22mu17jOXy1FeXv65cmWlVLM5V8MUI5ekggqsp4jr9lpVcU1dJGk68CrJSHavtP1TYGK6PI1kBArwMjA6fdxfXdPMfYD7ACJiBjAjb91pkt4E/gTsTzLKre7QtP1lSRXAOcDuhbxBs5p88YtfZNddd2XWrFkATJ48mf32248FCxYAsG7dOq655houvPDC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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "xgb.plot_importance(x.clf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Label has more than 2 values. Comparing to mean...\n",
      "[0]\tvalidation_0-error:0.17935\n",
      "[1]\tvalidation_0-error:0.1783\n",
      "[2]\tvalidation_0-error:0.1783\n",
      "[3]\tvalidation_0-error:0.1783\n",
      "[4]\tvalidation_0-error:0.1783\n",
      "[5]\tvalidation_0-error:0.17545\n",
      "[6]\tvalidation_0-error:0.16255\n",
      "[7]\tvalidation_0-error:0.1783\n",
      "[8]\tvalidation_0-error:0.1768\n",
      "[9]\tvalidation_0-error:0.1768\n",
      "[10]\tvalidation_0-error:0.1593\n",
      "[11]\tvalidation_0-error:0.17505\n",
      "[12]\tvalidation_0-error:0.17505\n",
      "[13]\tvalidation_0-error:0.16085\n",
      "[14]\tvalidation_0-error:0.16085\n",
      "[15]\tvalidation_0-error:0.1606\n",
      "[16]\tvalidation_0-error:0.16065\n",
      "[17]\tvalidation_0-error:0.1604\n",
      "[18]\tvalidation_0-error:0.16105\n",
      "[19]\tvalidation_0-error:0.16105\n",
      "[20]\tvalidation_0-error:0.16105\n",
      "[21]\tvalidation_0-error:0.161\n",
      "[22]\tvalidation_0-error:0.161\n",
      "[23]\tvalidation_0-error:0.16875\n",
      "[24]\tvalidation_0-error:0.16885\n",
      "[25]\tvalidation_0-error:0.1683\n",
      "[26]\tvalidation_0-error:0.1618\n",
      "[27]\tvalidation_0-error:0.1611\n",
      "[28]\tvalidation_0-error:0.1611\n",
      "[29]\tvalidation_0-error:0.16395\n",
      "[30]\tvalidation_0-error:0.16095\n",
      "[31]\tvalidation_0-error:0.16095\n",
      "[32]\tvalidation_0-error:0.1609\n",
      "[33]\tvalidation_0-error:0.1606\n",
      "[34]\tvalidation_0-error:0.1604\n",
      "[35]\tvalidation_0-error:0.16085\n",
      "[36]\tvalidation_0-error:0.1621\n",
      "[37]\tvalidation_0-error:0.1621\n",
      "[38]\tvalidation_0-error:0.1608\n",
      "[39]\tvalidation_0-error:0.1623\n",
      "[40]\tvalidation_0-error:0.16075\n",
      "[41]\tvalidation_0-error:0.1609\n",
      "[42]\tvalidation_0-error:0.16095\n",
      "[43]\tvalidation_0-error:0.16095\n",
      "[44]\tvalidation_0-error:0.1608\n",
      "[45]\tvalidation_0-error:0.16075\n",
      "[46]\tvalidation_0-error:0.1597\n",
      "[47]\tvalidation_0-error:0.1595\n",
      "[48]\tvalidation_0-error:0.1595\n",
      "[49]\tvalidation_0-error:0.1595\n",
      "[50]\tvalidation_0-error:0.1595\n",
      "[51]\tvalidation_0-error:0.1595\n",
      "[52]\tvalidation_0-error:0.1591\n",
      "[53]\tvalidation_0-error:0.159\n",
      "[54]\tvalidation_0-error:0.1591\n",
      "[55]\tvalidation_0-error:0.159\n",
      "[56]\tvalidation_0-error:0.1592\n",
      "[57]\tvalidation_0-error:0.1588\n",
      "[58]\tvalidation_0-error:0.1586\n",
      "[59]\tvalidation_0-error:0.15845\n",
      "[60]\tvalidation_0-error:0.1583\n",
      "[61]\tvalidation_0-error:0.15835\n",
      "[62]\tvalidation_0-error:0.1583\n",
      "[63]\tvalidation_0-error:0.1578\n",
      "[64]\tvalidation_0-error:0.15785\n",
      "[65]\tvalidation_0-error:0.15745\n",
      "[66]\tvalidation_0-error:0.158\n",
      "[67]\tvalidation_0-error:0.1576\n",
      "[68]\tvalidation_0-error:0.15705\n",
      "[69]\tvalidation_0-error:0.1572\n",
      "[70]\tvalidation_0-error:0.15705\n",
      "[71]\tvalidation_0-error:0.1571\n",
      "[72]\tvalidation_0-error:0.1573\n",
      "[73]\tvalidation_0-error:0.1571\n",
      "[74]\tvalidation_0-error:0.1571\n",
      "[75]\tvalidation_0-error:0.1575\n",
      "[76]\tvalidation_0-error:0.158\n",
      "[77]\tvalidation_0-error:0.15655\n",
      "[78]\tvalidation_0-error:0.15645\n",
      "[79]\tvalidation_0-error:0.1564\n",
      "[80]\tvalidation_0-error:0.15635\n",
      "[81]\tvalidation_0-error:0.1565\n",
      "[82]\tvalidation_0-error:0.1564\n",
      "[83]\tvalidation_0-error:0.15625\n",
      "[84]\tvalidation_0-error:0.1563\n",
      "[85]\tvalidation_0-error:0.1562\n",
      "[86]\tvalidation_0-error:0.15615\n",
      "[87]\tvalidation_0-error:0.1559\n",
      "[88]\tvalidation_0-error:0.15595\n",
      "[89]\tvalidation_0-error:0.15595\n",
      "[90]\tvalidation_0-error:0.156\n",
      "[91]\tvalidation_0-error:0.1562\n",
      "[92]\tvalidation_0-error:0.1558\n",
      "[93]\tvalidation_0-error:0.15595\n",
      "[94]\tvalidation_0-error:0.1559\n",
      "[95]\tvalidation_0-error:0.15575\n",
      "[96]\tvalidation_0-error:0.156\n",
      "[97]\tvalidation_0-error:0.156\n",
      "[98]\tvalidation_0-error:0.1555\n",
      "[99]\tvalidation_0-error:0.15555\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.7395"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = FakeDataEval(real, fake, 'trans_amount', source='real')\n",
    "y.fit()\n",
    "y.score()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fde69470cf8>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "xgb.plot_importance(y.clf)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "real, fake = get_data('Ticket')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Label has more than 2 values. Comparing to mean...\n",
      "[0]\tvalidation_0-error:0.391\n",
      "[1]\tvalidation_0-error:0.391\n",
      "[2]\tvalidation_0-error:0.38225\n",
      "[3]\tvalidation_0-error:0.382\n",
      "[4]\tvalidation_0-error:0.3791\n",
      "[5]\tvalidation_0-error:0.3768\n",
      "[6]\tvalidation_0-error:0.37915\n",
      "[7]\tvalidation_0-error:0.37535\n",
      "[8]\tvalidation_0-error:0.3778\n",
      "[9]\tvalidation_0-error:0.37395\n",
      "[10]\tvalidation_0-error:0.37455\n",
      "[11]\tvalidation_0-error:0.3744\n",
      "[12]\tvalidation_0-error:0.3729\n",
      "[13]\tvalidation_0-error:0.3731\n",
      "[14]\tvalidation_0-error:0.37325\n",
      "[15]\tvalidation_0-error:0.37225\n",
      "[16]\tvalidation_0-error:0.3733\n",
      "[17]\tvalidation_0-error:0.37195\n",
      "[18]\tvalidation_0-error:0.37185\n",
      "[19]\tvalidation_0-error:0.3718\n",
      "[20]\tvalidation_0-error:0.3721\n",
      "[21]\tvalidation_0-error:0.3725\n",
      "[22]\tvalidation_0-error:0.3723\n",
      "[23]\tvalidation_0-error:0.3725\n",
      "[24]\tvalidation_0-error:0.3726\n",
      "[25]\tvalidation_0-error:0.37225\n",
      "[26]\tvalidation_0-error:0.3724\n",
      "[27]\tvalidation_0-error:0.37235\n",
      "[28]\tvalidation_0-error:0.37205\n",
      "[29]\tvalidation_0-error:0.3715\n",
      "[30]\tvalidation_0-error:0.3715\n",
      "[31]\tvalidation_0-error:0.37155\n",
      "[32]\tvalidation_0-error:0.37155\n",
      "[33]\tvalidation_0-error:0.37155\n",
      "[34]\tvalidation_0-error:0.3729\n",
      "[35]\tvalidation_0-error:0.3728\n",
      "[36]\tvalidation_0-error:0.37275\n",
      "[37]\tvalidation_0-error:0.373\n",
      "[38]\tvalidation_0-error:0.3729\n",
      "[39]\tvalidation_0-error:0.37285\n",
      "[40]\tvalidation_0-error:0.37285\n",
      "[41]\tvalidation_0-error:0.373\n",
      "[42]\tvalidation_0-error:0.373\n",
      "[43]\tvalidation_0-error:0.373\n",
      "[44]\tvalidation_0-error:0.37295\n",
      "[45]\tvalidation_0-error:0.37295\n",
      "[46]\tvalidation_0-error:0.3728\n",
      "[47]\tvalidation_0-error:0.3728\n",
      "[48]\tvalidation_0-error:0.3728\n",
      "[49]\tvalidation_0-error:0.3728\n",
      "[50]\tvalidation_0-error:0.3728\n",
      "[51]\tvalidation_0-error:0.3728\n",
      "[52]\tvalidation_0-error:0.3728\n",
      "[53]\tvalidation_0-error:0.3728\n",
      "[54]\tvalidation_0-error:0.3728\n",
      "[55]\tvalidation_0-error:0.37285\n",
      "[56]\tvalidation_0-error:0.3729\n",
      "[57]\tvalidation_0-error:0.3729\n",
      "[58]\tvalidation_0-error:0.3729\n",
      "[59]\tvalidation_0-error:0.3729\n",
      "[60]\tvalidation_0-error:0.3729\n",
      "[61]\tvalidation_0-error:0.3729\n",
      "[62]\tvalidation_0-error:0.3729\n",
      "[63]\tvalidation_0-error:0.3729\n",
      "[64]\tvalidation_0-error:0.3729\n",
      "[65]\tvalidation_0-error:0.3729\n",
      "[66]\tvalidation_0-error:0.3729\n",
      "[67]\tvalidation_0-error:0.3729\n",
      "[68]\tvalidation_0-error:0.3729\n",
      "[69]\tvalidation_0-error:0.3729\n",
      "[70]\tvalidation_0-error:0.3729\n",
      "[71]\tvalidation_0-error:0.3729\n",
      "[72]\tvalidation_0-error:0.3729\n",
      "[73]\tvalidation_0-error:0.3729\n",
      "[74]\tvalidation_0-error:0.3729\n",
      "[75]\tvalidation_0-error:0.3729\n",
      "[76]\tvalidation_0-error:0.3729\n",
      "[77]\tvalidation_0-error:0.3729\n",
      "[78]\tvalidation_0-error:0.3729\n",
      "[79]\tvalidation_0-error:0.3729\n",
      "[80]\tvalidation_0-error:0.3729\n",
      "[81]\tvalidation_0-error:0.3729\n",
      "[82]\tvalidation_0-error:0.3729\n",
      "[83]\tvalidation_0-error:0.3729\n",
      "[84]\tvalidation_0-error:0.3728\n",
      "[85]\tvalidation_0-error:0.3728\n",
      "[86]\tvalidation_0-error:0.3728\n",
      "[87]\tvalidation_0-error:0.3728\n",
      "[88]\tvalidation_0-error:0.37285\n",
      "[89]\tvalidation_0-error:0.37285\n",
      "[90]\tvalidation_0-error:0.37285\n",
      "[91]\tvalidation_0-error:0.3729\n",
      "[92]\tvalidation_0-error:0.3729\n",
      "[93]\tvalidation_0-error:0.3729\n",
      "[94]\tvalidation_0-error:0.3729\n",
      "[95]\tvalidation_0-error:0.3729\n",
      "[96]\tvalidation_0-error:0.3729\n",
      "[97]\tvalidation_0-error:0.37285\n",
      "[98]\tvalidation_0-error:0.3729\n",
      "[99]\tvalidation_0-error:0.3729\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.49195"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = FakeDataEval(real['num'], fake['num'], 'MktFare', source='real')\n",
    "y.fit()\n",
    "y.score()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Label has more than 2 values. Comparing to mean...\n",
      "[0]\tvalidation_0-error:0.1706\n",
      "[1]\tvalidation_0-error:0.1706\n",
      "[2]\tvalidation_0-error:0.1673\n",
      "[3]\tvalidation_0-error:0.1694\n",
      "[4]\tvalidation_0-error:0.17225\n",
      "[5]\tvalidation_0-error:0.16685\n",
      "[6]\tvalidation_0-error:0.1684\n",
      "[7]\tvalidation_0-error:0.17105\n",
      "[8]\tvalidation_0-error:0.16945\n",
      "[9]\tvalidation_0-error:0.1678\n",
      "[10]\tvalidation_0-error:0.1695\n",
      "[11]\tvalidation_0-error:0.16795\n",
      "[12]\tvalidation_0-error:0.1665\n",
      "[13]\tvalidation_0-error:0.1623\n",
      "[14]\tvalidation_0-error:0.1585\n",
      "[15]\tvalidation_0-error:0.1585\n",
      "[16]\tvalidation_0-error:0.1585\n",
      "[17]\tvalidation_0-error:0.15775\n",
      "[18]\tvalidation_0-error:0.15445\n",
      "[19]\tvalidation_0-error:0.15125\n",
      "[20]\tvalidation_0-error:0.1502\n",
      "[21]\tvalidation_0-error:0.14725\n",
      "[22]\tvalidation_0-error:0.1479\n",
      "[23]\tvalidation_0-error:0.14665\n",
      "[24]\tvalidation_0-error:0.1467\n",
      "[25]\tvalidation_0-error:0.14495\n",
      "[26]\tvalidation_0-error:0.14355\n",
      "[27]\tvalidation_0-error:0.14285\n",
      "[28]\tvalidation_0-error:0.1421\n",
      "[29]\tvalidation_0-error:0.14005\n",
      "[30]\tvalidation_0-error:0.1401\n",
      "[31]\tvalidation_0-error:0.1375\n",
      "[32]\tvalidation_0-error:0.13725\n",
      "[33]\tvalidation_0-error:0.1341\n",
      "[34]\tvalidation_0-error:0.1333\n",
      "[35]\tvalidation_0-error:0.13275\n",
      "[36]\tvalidation_0-error:0.13145\n",
      "[37]\tvalidation_0-error:0.1317\n",
      "[38]\tvalidation_0-error:0.131\n",
      "[39]\tvalidation_0-error:0.1307\n",
      "[40]\tvalidation_0-error:0.13015\n",
      "[41]\tvalidation_0-error:0.13035\n",
      "[42]\tvalidation_0-error:0.12925\n",
      "[43]\tvalidation_0-error:0.1284\n",
      "[44]\tvalidation_0-error:0.1279\n",
      "[45]\tvalidation_0-error:0.1282\n",
      "[46]\tvalidation_0-error:0.1272\n",
      "[47]\tvalidation_0-error:0.1273\n",
      "[48]\tvalidation_0-error:0.12665\n",
      "[49]\tvalidation_0-error:0.1263\n",
      "[50]\tvalidation_0-error:0.1255\n",
      "[51]\tvalidation_0-error:0.12495\n",
      "[52]\tvalidation_0-error:0.1245\n",
      "[53]\tvalidation_0-error:0.1237\n",
      "[54]\tvalidation_0-error:0.124\n",
      "[55]\tvalidation_0-error:0.1239\n",
      "[56]\tvalidation_0-error:0.124\n",
      "[57]\tvalidation_0-error:0.1238\n",
      "[58]\tvalidation_0-error:0.12295\n",
      "[59]\tvalidation_0-error:0.1225\n",
      "[60]\tvalidation_0-error:0.12215\n",
      "[61]\tvalidation_0-error:0.1222\n",
      "[62]\tvalidation_0-error:0.12235\n",
      "[63]\tvalidation_0-error:0.1222\n",
      "[64]\tvalidation_0-error:0.1219\n",
      "[65]\tvalidation_0-error:0.1217\n",
      "[66]\tvalidation_0-error:0.1218\n",
      "[67]\tvalidation_0-error:0.1216\n",
      "[68]\tvalidation_0-error:0.12155\n",
      "[69]\tvalidation_0-error:0.12175\n",
      "[70]\tvalidation_0-error:0.12115\n",
      "[71]\tvalidation_0-error:0.1207\n",
      "[72]\tvalidation_0-error:0.12065\n",
      "[73]\tvalidation_0-error:0.11985\n",
      "[74]\tvalidation_0-error:0.11975\n",
      "[75]\tvalidation_0-error:0.1191\n",
      "[76]\tvalidation_0-error:0.1188\n",
      "[77]\tvalidation_0-error:0.11845\n",
      "[78]\tvalidation_0-error:0.1182\n",
      "[79]\tvalidation_0-error:0.1178\n",
      "[80]\tvalidation_0-error:0.1179\n",
      "[81]\tvalidation_0-error:0.1169\n",
      "[82]\tvalidation_0-error:0.11705\n",
      "[83]\tvalidation_0-error:0.11655\n",
      "[84]\tvalidation_0-error:0.1164\n",
      "[85]\tvalidation_0-error:0.11585\n",
      "[86]\tvalidation_0-error:0.11565\n",
      "[87]\tvalidation_0-error:0.1157\n",
      "[88]\tvalidation_0-error:0.1155\n",
      "[89]\tvalidation_0-error:0.11575\n",
      "[90]\tvalidation_0-error:0.1156\n",
      "[91]\tvalidation_0-error:0.115\n",
      "[92]\tvalidation_0-error:0.1151\n",
      "[93]\tvalidation_0-error:0.115\n",
      "[94]\tvalidation_0-error:0.11485\n",
      "[95]\tvalidation_0-error:0.1145\n",
      "[96]\tvalidation_0-error:0.1146\n",
      "[97]\tvalidation_0-error:0.11425\n",
      "[98]\tvalidation_0-error:0.11425\n",
      "[99]\tvalidation_0-error:0.1138\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.49473"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = FakeDataEval(real['num'], fake['num'], 'MktFare')\n",
    "y.fit()\n",
    "y.score()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "base"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
